/**
 * @p.md
 * 
 * 集群身份标识
 * 用于唯一标识集群中的Actor
 */
export class ClusterIdentity {
  /**
   * 构造函数
   * @param kind Actor类型
   * @param identity 身份标识
   */
  constructor(
    public readonly kind: string,
    public readonly identity: string
  ) {}

  /**
   * 转换为字符串
   */
  toString(): string {
    // 使用与Go版本一致的格式：kind/identity
    return `${this.kind}/${this.identity}`;
  }

  /**
   * 获取Actor ID
   * 用于在ProcessRegistry中注册
   */
  getActorId(): string {
    // 使用与Go版本一致的格式：kind-identity
    return `${this.kind}-${this.identity}`;
  }

  /**
   * 从字符串解析
   * @param str 字符串
   */
  static fromString(str: string): ClusterIdentity {
    const parts = str.split('/');
    if (parts.length !== 2) {
      throw new Error('Invalid cluster identity format');
    }
    return new ClusterIdentity(parts[0], parts[1]);
  }

  /**
   * 判断是否相等
   * @param other 另一个身份标识
   */
  equals(other: ClusterIdentity): boolean {
    return this.kind === other.kind && this.identity === other.identity;
  }
}

/**
 * 集群Actor激活请求
 */
export interface ActivationRequest {
  /**
   * 集群身份
   */
  clusterIdentity: ClusterIdentity;
  
  /**
   * 请求ID
   */
  requestId: string;
  
  /**
   * 目标节点地址（可选）
   */
  targetNode?: string;
}

/**
 * 集群Actor激活响应
 */
export interface ActivationResponse {
  /**
   * 集群身份
   */
  clusterIdentity: ClusterIdentity;
  
  /**
   * 请求ID
   */
  requestId: string;
  
  /**
   * PID地址
   */
  pidAddress: string;
  
  /**
   * PID ID
   */
  pidId: string;
  
  /**
   * 是否成功
   */
  success: boolean;
  
  /**
   * 错误信息（如果失败）
   */
  error?: string;
} 